﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

//importamos
using EventSys.BussinesEntities;
using EventSys.BussinesLogic;
using Microsoft.Practices.Unity;
using System.IO;
//using System.Data;
using System.Drawing;

namespace EventSys.MVC4Web.Controllers
{
    public class ParticipanteController : Controller
    {
        [Dependency]
        public IParticipanteService participanteService { get; set; }

        /////
        [Dependency]
        public IEstadoService estadoService { get; set; }

        [Dependency]
        public IUbigeoService ubigeoService { get; set; }

        [Dependency]
        public IActividadService actividadService { get; set; }

        /////
        // GET: /Participante/

        public ActionResult Index(Int32? page)
        {
            //var pageNumber = page ?? 1;
            //var lista = participanteService.GetAllFromParticipantes(pageNumber, 4);

            var lista = participanteService.GetAllFromParticipante();
            return View(lista);
        }
        [HttpPost]
        public ActionResult Index(string criterio)
        {
            var lista = participanteService.GetParticipanteByCriterioCodDni(criterio);
            return View(lista);
        }


        ////////////////////CREAR////////////////////

        public ActionResult Create()
        {
            var listarPais = ubigeoService.listarPaises("");
            var listarDep = ubigeoService.ListDepartamentoByPais("");
            var listarProv = ubigeoService.ListProvinciaByDepartamento("");

            ViewData["idPais"] = new SelectList(listarPais, "idUbigeo", "Nombre");
            ViewData["idDepartamento"] = new SelectList(listarDep, "idUbigeo", "Nombre");
            ViewData["IdUbigeo"] = new SelectList(listarProv, "idUbigeo", "Nombre");

            return View();
        }

        [HttpPost]
        public ActionResult Create(Participante participante, HttpPostedFileBase image)
        {

            //if (ModelState.IsValid)
            //{
                if (image != null)
                {
                    //category.ImageMimeType = image.ContentType;
                    //int length = image.ContentLength;
                    //byte[] buffer = new byte[length];
                    //image.InputStream.Read(buffer, 0, length);
                    //category.Picture = buffer;

                    //alm.Foto = imageToByteArray(fotoPictureBox.Image);
                    //var path = Path.Combine(Server.MapPath("~/Content"), image.FileName);
                    //ViewBag.myimage = image.FileName;

                    participante.ImageMimeType = image.ContentType;
                    int length = image.ContentLength;
                    byte[] buffer = new byte[length];
                    image.InputStream.Read(buffer, 0, length);

                    participante.foto = buffer;

                //}

                participanteService.AddParticipante(participante);
                return RedirectToAction("Index");
            }

            //return View("Create"); 

                return RedirectToAction("Index");

        }

        public ActionResult Edit(Int32 id, string participante)
        {
            var usuario = participanteService.GetParticipanteById(id);

            var listarPais = ubigeoService.listarPaises("");
            var listarDep = ubigeoService.ListDepartamentoByPais("");
            var listarProv = ubigeoService.ListProvinciaByDepartamento("");

            ViewData["idPais"] = new SelectList(listarPais, "idUbigeo", "Nombre",usuario.idParticipante);
            ViewData["idDepartamento"] = new SelectList(listarDep, "idUbigeo", "Nombre",usuario.idParticipante);
            ViewData["IdUbigeo"] = new SelectList(listarProv, "idUbigeo", "Nombre",usuario.idParticipante);
            
            return View(usuario);
        }

        [HttpPost]
        public ActionResult Edit(Participante participante, HttpPostedFileBase image)
        {
            if (image != null)
            {
                participante.ImageMimeType = image.ContentType;
                int length = image.ContentLength;
                byte[] buffer = new byte[length];
                image.InputStream.Read(buffer, 0, length);

                participante.foto = buffer;

                participanteService.UpdateParticipante(participante);
                return RedirectToAction("Index");
            }
            else {participanteService.UpdateParticipante(participante); }

            return RedirectToAction("Index");
        }

        public ActionResult Delete(int id)
        {
            participanteService.RemoveParticipante(id);
            return RedirectToAction("Index");
        }

        
        public ActionResult BusquedaId(FormCollection form)
        {

            var dato= form["criterio"];//se capturo el dato enviado para su busqueda            


            return View(dato);
        }

        public ActionResult Details(Int32 id)
        {
            var participante = participanteService.GetParticipanteById(id);

            return PartialView("_Details", participante);
        }


        //***** ACTION RESULT para cascada *****

        public ActionResult getServiceProvinciaByIdDepJSON(string idDepartamento)
        {
            var query = from p in ubigeoService.ListProvinciaByDepartamento(idDepartamento)
                        select new
                        {
                            value = p.idUbigeo,
                            label = p.Nombre
                        };

            return Json(query.ToList(), JsonRequestBehavior.AllowGet);
        }

        public ActionResult getServiceDepByIdPais(string idPais)
        {
            var query = from p in ubigeoService.ListDepartamentoByPais(idPais)
                        select new
                        {
                            value = p.idUbigeo,
                            label = p.Nombre
                        };

            return Json(query.ToList(), JsonRequestBehavior.AllowGet);
        }

        public ActionResult getServiceHijosByIdUbigeoRJSON(string idUbigeoR)
        {
            var query = from p in ubigeoService.ListHijosByIdUbigeoR(idUbigeoR)
                        select new
                        {
                            value = p.idUbigeo,
                            label = p.Nombre
                        };

            return Json(query.ToList(), JsonRequestBehavior.AllowGet);
        }



        // *****************   PROBANDO CON IMGEN    ******************

        [HttpPost]
        public ActionResult SendImage(HttpPostedFileBase img)
        {
            //Stream str;
            //Participante participante = new Participante();
            ////Alumno alm = (Alumno)alumnoBindingSource.Current;

            //openFileDialog1.Filter = "JPG(*.jpg)|*.jpg|PNG(*.png)|*.png|GIF(*.gif)|*.gif|Todos(*.Jpg, *.Png, *.Gif, *.Tiff, *.Jpeg, *.Bmp)|*.Jpg; *.Png; *.Gif; *.Tiff; *.Jpeg; *.Bmp";
            //openFileDialog1.FilterIndex = 4;
            //openFileDialog1.RestoreDirectory = true;

            //if (openFileDialog1.ShowDialog() == DialogResult.OK)
            //{
            //    try
            //    {
            //        if ((str = openFileDialog1.OpenFile()) != null)
            //        {
            //            using (str)
            //            {
            //                fotoPictureBox.Image = Bitmap.FromStream(str);
            //                alm.Foto = imageToByteArray(fotoPictureBox.Image);
            //            }
            //        }
            //    }
            //    catch (Exception ex)
            //    {
            //        MessageBox.Show(ex.Message);
            //    }

            //}
                        
            var data = new byte[img.ContentLength];
            img.InputStream.Read(data, 0, img.ContentLength);
            var path = ControllerContext.HttpContext.Server.MapPath("/");
            var filename = Path.Combine(path, Path.GetFileName(img.FileName));
            System.IO.File.WriteAllBytes(Path.Combine(path, filename), data);
            ViewBag.ImageUploaded = filename;

            return View("Index");
        }

        public byte[] imageToByteArray(Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }

        public Image byteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }

        //para previsualizar la imagen
        public ActionResult Preview(string file)
        {
            Participante participante = new Participante();
            var path = ControllerContext.HttpContext.Server.MapPath("/");
            if (System.IO.File.Exists(Path.Combine(path, file)))
            {
                return File(Path.Combine(path, file), "image/jpeg");
            }
            return new HttpNotFoundResult();
        }


        /// ///////  para validar el DNI  /////
        public ActionResult validarDni(string dni)
        {
            var list = participanteService.GetAllFromParticipante().ToList();

            var rpt = new { existe = false, };

            try {
                var query = from p in list select p.DNI;

                foreach (var item in query) {
                    if (item == dni) {
                        rpt = new { existe = true, };
                    }
                }
                return Json(rpt, JsonRequestBehavior.AllowGet);//nos permite enviar el mensaje
            }
            catch (SystemException) { }

            return Json(rpt, JsonRequestBehavior.AllowGet);
        }


        /// ///////  para validar el Codigo UPN  /////
        public ActionResult validarCodUPN(string cod)
        {
            var list = participanteService.GetAllFromParticipante().ToList();

            var rpt = new { existe = false, };

            try
            {
                var query = from p in list select p.CodigoUpn;

                foreach (var item in query)
                {
                    if (item == cod)
                    {
                        rpt = new { existe = true, };
                    }
                }
                return Json(rpt, JsonRequestBehavior.AllowGet);//nos permite enviar el mensaje
            }
            catch (SystemException) { }

            return Json(rpt, JsonRequestBehavior.AllowGet);
        }
 

        // para leer la imagen d la base d datos
        public FileContentResult GetImage(Int32 id)
        {
            var participante = participanteService.GetParticipanteById(id);

            if (participante != null) {

                string type = string.Empty;
                if (!string.IsNullOrEmpty(participante.ImageMimeType)) {
                    type = participante.ImageMimeType;
                }
                else {
                    type = "image/jpeg";
                }

                return File(participante.foto, type);
            }
            else {
                return null;
            }
        }


        /* ========= ========== */

        public ActionResult cargarPublic(string criterio)
        {
            var participante = participanteService.GetParticipanteByCriterioCodDni(criterio);
            return PartialView("_LogeoPublic", participante);

        }

        //[HttpPost]
        public ActionResult crearPublic(Participante participante)
        {
            return RedirectToAction("Index");
        }

        /////
        // GET: /Participante al Inscribirse/
        [HttpPost]
        public ActionResult Public(Int32 id)
        {
            //var actividad = actividadService.GetActividadById(id);

            Actividad actividad = new Actividad();

            actividad.idActividad = id;

            //Participante participante = new Participante();

            //participante.idParticipante = 0;
            //participante.CodigoUpn = "";
            //participante.DNI = "";
            //participante.Nombres = "";
            //participante.Apellidos = "";
            //participante.Contraseña = "";

            return PartialView("_Public", actividad);
            //return PartialView(actividad);
        }

        //[HttpPost]
        //public ActionResult LogeoPublic(string criterio)
        //{
        //    var lista = participanteService.GetParticipanteByCriterio(criterio).ToList();

        //    Participante participante = new Participante();

        //    foreach (var item in lista)
        //    {
        //        participante.idParticipante = item.idParticipante;
        //        participante.CodigoUpn = item.CodigoUpn;
        //        participante.DNI = item.DNI;
        //        participante.Nombres = item.Nombres;
        //        participante.Apellidos = item.Apellidos;
        //        participante.Contraseña = "";
        //    }

        //    return PartialView("_LogeoPublic", participante);
        //}

    }
    
}
